import random
import tkinter as tk
from tkinter import Tk, ttk


class CallWindow:
    def __init__(self):
        # 初始化参数
        self.title = "Test"
        self.tips = ["天天开心",
                     "早点休息",
                     "照顾好自己",
                     "好好吃饭",
                     "活力满满",
                     "愿所有烦恼都消失",
                     "别熬夜",
                     "今天过的开心吗",
                     "顺顺利利",
                     "记得喝水哦~",
                     "别太劳累",
                     "保持微笑",
                     "享受当下",
                     "明天会更好",
                     "天冷了，多穿衣服"
                     ]  # 丰富示例数据
        self.colors = ["Lightpink",
                       "SkyBlue",
                       "LightGreen",
                       "Lavender",
                       "LightYellow",
                       "Plum",
                       "Coral",
                       "Bisque",
                       "Aquamarine",
                       "MistyRose",
                       "Honeydew",
                       "LavenderBlush",
                       "OldLace"

                       ]
        self.window_width = 250  # 修正：原25是字符宽度，改为像素宽度更直观
        self.window_height = 60  # 修正：原3是字符高度，改为像素高度
        self.screen_width, self.screen_height = self.getScreenSize()
        self.windows = []  # 存储所有窗口实例
        self.create_count = 0  # 已创建的窗口数量
        self.total_windows = 300  # 总窗口数量（可调整）
        self.create_interval = 200  # 窗口创建间隔（毫秒），越大越慢

    def getChoiceOfTips(self) -> str:
        return random.choice(self.tips)

    def getChoiceOfColors(self) -> str:
        return random.choice(self.colors)

    def getScreenSize(self):
        """获取屏幕尺寸"""
        root = Tk()
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        root.destroy()
        return screen_width, screen_height

    def getChoiceOfWindowPosition(self):
        """获取窗口位置（居中）"""
        taskbar_height = 30  # 假设任务栏高度为30像素
        x = random.randint(0, self.screen_width - self.window_width)
        y = random.randint(0, self.screen_height - self.window_height - taskbar_height)
        return x, y

    def getNewWindow(self):
        """创建单个窗口（立即渲染）"""
        tip = self.getChoiceOfTips()
        color = self.getChoiceOfColors()
        x, y = self.getChoiceOfWindowPosition()

        # 创建子窗口（依赖主root，创建后立即显示）
        window = tk.Toplevel()
        window.title(self.title)
        # 用像素设置窗口大小和位置（原字符宽度/高度改为像素，更精准）
        window.geometry(f"{self.window_width}x{self.window_height}+{x}+{y}")
        # 可选：窗口置顶（避免被其他窗口遮挡，可注释）
        # window.attributes("-topmost", True)
        window.config(bg=color)

        # 布局标签（用pack填充窗口，避免内容挤压）
        frame = ttk.Frame(window, padding=0)
        frame.pack(fill=tk.BOTH, expand=True)

        label = tk.Label(
            frame,
            text=tip,
            font=("微软雅黑", 16, "bold"),  # 加粗字体，更醒目
            bg=color,
            fg="#333333",  # 文字颜色，提升可读性
            wraplength=self.window_width - 40  # 自动换行，避免文字溢出
        )
        label.pack(fill=tk.BOTH, expand=True, padx=0, pady=0)

        self.windows.append(window)
        print(f"已创建窗口 {self.create_count + 1}/{self.total_windows}：{tip}")

    def batchCreateWindows(self):
        """分批创建窗口：每次创建1个，延迟执行"""
        if self.create_count < self.total_windows:
            self.getNewWindow()  # 创建当前窗口
            self.create_count += 1  # 计数+1
            # 延迟指定时间后，继续创建下一个窗口（递归调用）
            self.root.after(self.create_interval, self.batchCreateWindows)
        else:
            print(f"所有 {self.total_windows} 个窗口已创建完成！")

    def run(self):
        self.root = Tk()
        self.root.withdraw()
        self.root.after(100, self.batchCreateWindows)
        self.root.mainloop()

if __name__ == "__main__":
    app = CallWindow()
    app.run()